]> dgit.raspbian.org Git - gnome-shell.git/commitdiff
unlockDialog: Properly reset auth prompt when showing it
authorRay Strode <rstrode@redhat.com>
Tue, 5 Oct 2021 15:01:19 +0000 (11:01 -0400)
committerRay Strode <rstrode@redhat.com>
Fri, 8 Oct 2021 15:56:23 +0000 (11:56 -0400)
If a user hits escape twice really fast when coming back to
their machine to unlock it, they made end up getting presented
with a non-functional unlock screen that doesn't show their
user icon and doesn't ask for a password.

This is because showPrompt assumes that if an auth prompt already
exists, it's ready to go. That may not be true, if it's in the
process of getting torn down at the time because it's in the middle
of a cancel animation.

This commit solves the problem by ensuring the auth prompt is always
in a fresh reset state before showing it.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/1999>

js/ui/unlockDialog.js

index f4c76c41ad91d405f6e3836f932c8df83c2bc509..3ef6aa90f053d75d6db50e30c6f8bb58079e8ae6 100644 (file)
@@ -676,16 +676,14 @@ var UnlockDialog = GObject.registerClass({
     }
 
     _ensureAuthPrompt() {
-        if (this._authPrompt)
-            return;
-
-        this._authPrompt = new AuthPrompt.AuthPrompt(this._gdmClient,
-            AuthPrompt.AuthPromptMode.UNLOCK_ONLY);
-        this._authPrompt.connect('failed', this._fail.bind(this));
-        this._authPrompt.connect('cancelled', this._fail.bind(this));
-        this._authPrompt.connect('reset', this._onReset.bind(this));
-
-        this._promptBox.add_child(this._authPrompt);
+        if (!this._authPrompt) {
+            this._authPrompt = new AuthPrompt.AuthPrompt(this._gdmClient,
+                AuthPrompt.AuthPromptMode.UNLOCK_ONLY);
+            this._authPrompt.connect('failed', this._fail.bind(this));
+            this._authPrompt.connect('cancelled', this._fail.bind(this));
+            this._authPrompt.connect('reset', this._onReset.bind(this));
+            this._promptBox.add_child(this._authPrompt);
+        }
 
         this._authPrompt.reset();
         this._authPrompt.updateSensitivity(true);